package com.bh.ledger.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bh.ledger.domain.JcLedgerDetail;
import com.bh.ledger.vo.JcCustomerLedgerDetail;
import com.bh.ledger.vo.JcLedgerDetailGenerateVo;
import com.bh.ledger.vo.JcLedgerDetailVo;
import com.bh.order.domain.JcOrder;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 台帐明细Service接口
 *
 * @author slx
 * @date 2023-04-24
 */
public interface IJcLedgerDetailService extends IService<JcLedgerDetail> {
    /**
     * 查询台帐明细
     *
     * @param id 台帐明细主键
     * @return 台帐明细
     */
    public JcLedgerDetail selectJcLedgerDetailById(Long id);

    /**
     * 删除台帐明细信息
     *
     * @param id 台帐明细主键
     * @return 结果
     */
    public List<JcLedgerDetail> selectJcLedgerDetailListByShipmentId(Long shipmentId);

    /**
     * 查询对应的订单的台帐明细
     * @param filed1 保存的订单id
     * @return
     */
    public List<JcLedgerDetail> selectNoUseJcLedgerDetailListByField1(String filed1);

    /**
     * 查询台帐明细列表
     *
     * @param jcLedgerDetail 台帐明细
     * @return 台帐明细集合
     */
    public List<JcLedgerDetail> selectJcLedgerDetailList(JcLedgerDetail jcLedgerDetail);

    /**
     * 查询台帐明细列表
     *
     * @param jcLedgerDetail 台帐明细
     * @return 台帐明细集合
     */
    public List<JcCustomerLedgerDetail> selectJcCustomerLedgerDetailList(JcCustomerLedgerDetail jcLedgerDetail);


    /**
     * 查询派送员台帐明细列表
     * @param orderId
     * @return
     */
    public List<JcLedgerDetail> selectJcLedgerDetailListByOrderId(Long orderId);

    /**
     * 查询派送员台帐明细列表
     * @param orderId
     * @return
     */
    public List<JcLedgerDetailVo> selectJcLedgerDetailVoListByOrderId(Long orderId);

    /**
     * 手动生成
     * @param generateVo
     * @return
     */
    public int manualGenerate(JcLedgerDetailGenerateVo generateVo);

    /**
     * 新增台帐明细
     *
     * @param jcLedgerDetail 台帐明细
     * @return 结果
     */
    public int insertJcLedgerDetail(JcLedgerDetail jcLedgerDetail);

    /**
     * 修改台帐明细
     *
     * @param jcLedgerDetail 台帐明细
     * @return 结果
     */
    public int updateJcLedgerDetail(JcLedgerDetail jcLedgerDetail);

    /**
     * 批量删除台帐明细
     *
     * @param ids 需要删除的台帐明细主键集合
     * @return 结果
     */
    public int deleteJcLedgerDetailByIds(Long[] ids);

    /**
     * 删除台帐明细信息
     *
     * @param id 台帐明细主键
     * @return 结果
     */
    public int deleteJcLedgerDetailById(Long id);

    /**
     * 删除台帐明细信息
     *
     * @param id 台帐明细主键
     * @return 结果
     */
    public int deleteByShipmentId(Long shipmentId);


    /**
     * 确认订单
     * @param orderId
     * @return
     */
    public int confirm(Long orderId, Date date);

    /**
     * 确认订单
     * @param orderId
     * @return
     */
    public int unconfirmed(Long orderId);

    /**
     * 查询价格并插入台帐明细
     */
    public Map<String, Object> insertLedgerDetailByPrice(JcOrder jcOrder, String addressType);
}
